#pragma once
#include <GraphicsBaseItem.h>

class GraphicsDrawingItem :public GraphicsBaseItem
{
public:
	enum DrawingType
	{
		Pen,// 画笔
		Eraser// 橡皮檫
	};
	GraphicsDrawingItem(GraphicsBaseItem* parent = nullptr, GraphicsScene* scene = nullptr);
	// 设置背景图
	void setImage(const QImage& sourceImage);
	void fitToScreen();
	// 设置遮罩
	void setMaskImage(const QImage& maskImage);
	void initGraphics() override;
	void setDrawingType(DrawingType type);
	// 设置画笔大小
	void setPenWidth(qreal penWidth);
	// 是否显示画笔
	void setPenVisable(bool isVisable);
	// 是否显示遮罩
	void setMaskVisable(bool isVisable);
private slots:
	void onUpdateMask();
protected:
	void paint(QPainter* painter, const QStyleOptionGraphicsItem*, QWidget*) override;
	void mousePressEvent(QGraphicsSceneMouseEvent* event)override;
	void mouseMoveEvent(QGraphicsSceneMouseEvent* event)override;
	void mouseReleaseEvent(QGraphicsSceneMouseEvent* event)override;
private:
	// 设置尺寸
	void setSize(const QSize& size);
	void createBackgroundImage();
	QPainterPath strokerPath(QPainterPath& path);
	QCursor getCursor();
	void init();
private:
	// 画笔路径
	QPainterPath m_penPath;
	// 鼠标按下时的遮罩
	QImage m_pressMask;
	// 鼠标按下时的坐标
	QPointF m_pressPoint;
	// 是否按下
	bool m_isPressed = false;
	// 画笔类型
	DrawingType m_type = DrawingType::Pen;
	// 前景图片
	QImage m_image;
	// 遮罩背景图
	QImage m_maskImage;
	// 底图
	QImage m_bcImage;
	// 画笔宽度
	qreal m_penWidth = 30.0;
	// 是否显示画笔
	bool m_isVisablePen = false;
	// 是否显示遮罩
	bool m_isVisableMask = true;
	// 画笔颜色
	QColor m_penColor = QColor(44, 125, 250, 200);
};
using GraphicsDrawingType = GraphicsDrawingItem::DrawingType;

